﻿//------------------------------------------------------------
// Author: 烟雨迷离半世殇
// Mail: 1778139321@qq.com
// Data: 2019年12月30日 21:35:06
//------------------------------------------------------------

using System;

namespace NKG_MVVM_UI
{
    /// <summary>
    /// 这里同样可以用BindableProperty来对UI组件进行绑定，从而达到双向绑定的目的
    /// 但是个人感觉没有必要
    /// 例：有一个购买商品的UI，滚动条来控制购买商品的数目，这是典型的UI改变导致Model改变
    /// 直接用引擎UI提供的事件进行Model更改就好了
    /// 我们更应该专注的是游戏逻辑导致的UI的Mode数据变化导致的UI渲染状态的变化
    /// </summary>
    public class Test01View : ATempView<Test01AViewModel>
    {
        /// <summary>
        /// 虚拟的Text组件
        /// </summary>
        public string VirtualText = "Hello";

        /// <summary>
        /// 虚拟的Image组件
        /// </summary>
        public int VirtualImage = 0;

        public override void OnInit()
        {
            Console.WriteLine("Test01View被初始化了");

            Binder.Add<string>("Text", (a, b) =>
            {
                VirtualText = b;
                StateFactory.CreateState<Test01State, string>("Text", b);
                Console.WriteLine($"Text组件值改变了:{b}");
            });

            Binder.Add<int>("Image", (a, b) =>
            {
                StateFactory.CreateState<Test01State, int>("Image", b);
                Console.WriteLine($"Image组件值改变了:{b}");
            });

            Binder.Add<Test01Model>("Test01Model", (a, b) =>
            {
                StateFactory.CreateState<Test01State, Test01Model>("Test01Model", b);
                Console.WriteLine("Test01Model改变了");
            });
        }

        public override void OnRecycle()
        {
        }

        public override void OnOpen()
        {
            Console.WriteLine("Test01View被显示了");
        }

        public override void OnClose()
        {
            Console.WriteLine("Test01View被关闭了");
        }
    }
}